/**
 * 绘制-抽象类
 */
export default class BaseDraw {
  constructor(options) {
    if (this.constructor === BaseDraw) {
      throw new Error("抽象类BaseDraw不能实例化");
    }
    this.viewer = options.viewer; // cesium viwer
    this._tip = options._tip; // 提示DOM相关
    this.ellipsoid = options.ellipsoid; // cesium 使用的椭球体
    this.customType = options.customType; // cesium 自定义事件标识符号
    this.entityCollection = options.entityCollection; // cesium 自定义事件标识符号
    this._handler = options._handler; // 二次封装cesium 屏幕键盘事件处理
    this._caculater = options._caculater; // 地理空间计算
    this._coorder = options._coorder; // 坐标转化方法
  }
  // 抽象方法：子类必须实现
  startDraw() {
    throw new Error("startDraw 必须被实现");
  }
  // 抽象方法：子类必须实现
  endDraw() {
    throw new Error("endDraw 必须被实现");
  }
  // 抽象方法：子类必须实现
  removeDraw() {
    throw new Error("removeDraw 必须被实现");
  }
  // 生成uuid
  generateUUID() {
    return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(
      /[xy]/g,
      function (c) {
        const r = (Math.random() * 16) | 0,
          v = c === "x" ? r : (r & 0x3) | 0x8;
        return v.toString(16);
      }
    );
  }
}
